Diagnóstico y depuración de datos

Residencia de Epidemiología

Etapas previas al análisis

La etapa de depuración o limpieza de datos comienza con la exploración inicial y el diagnóstico adecuado de cada variable de interés de la tabla de datos cruda. Interviene aquí también, el objetivo del análisis, el protocolo de análisis pensado y el diccionario de datos asociado a la tabla.







Finalmente se hacen las transformaciones necesarias en los datos a partir del diagnóstico realizado.

Limpieza de datos


  • Exploración de la estructura de la tabla de datos
  • Verificación del tipo de dato de cada variable de interés
  • Detección de valores faltantes
  • Detección de errores

    • Identificación de las categorías de las variables cualitativas

    • Análisis de los mínimos y máximos de valores de cada variable cuantitativa

Exploración y diagnóstico de datos


La exploración de datos se puede incluir dentro del análisis exploratorio de datos (EDA en inglés) y persigue un primer grupo de objetivos:

  • Conocer la estructura de la tabla de datos y sus tipos de variables
  • Detectar observaciones incompletas (valores faltantes)
  • Detectar datos con errores e inconsistencias

Exploración y diagnóstico de datos


Habitualmente hablamos de calidad de los datos en relación a los items anteriores.

Una segunda etapa nos va servir para conocer la distribución de las variables de interés a partir de:

  • Resumir datos mediante estadísticos y gráficos
  • Detectar valores atípicos (outlier)

Paquetes especificos

Vamos a trabajar con dos paquetes especiales que nos permiten hacer este trabajo, aunque dentro del universo de librerías de R vamos a encontrar muchos mas.

skimr

Está diseñado para obtener un resumen rápido de la estructura de tablas de datos y es compatible con el ecosistema tidyverse.

dlookr

Se define como una colección de herramientas que permiten el diagnóstico, la exploración y la transformación de datos. El diagnóstico de datos proporciona información y visualización de valores faltantes, valores atípicos y valores únicos y negativos para ayudarle a comprender la distribución y la calidad de sus datos.

Duplicados

Otro de los problemas con los debemos lidiar muchas veces es tener observaciones duplicadas.


Las tareas habituales en estos casos son:

  • Detección de observaciones y/o partes de observaciones (variables clave) duplicadas
  • Eliminación de duplicados a partir de observaciones únicas.
  • Recortar tabla de datos para eliminar duplicados
  • Marcar duplicados (conservando duplicados en la tabla)

Detección de duplicados


Las observaciones duplicadas pueden ser completas, generalmente a raíz de algún problema informático o bien parcial.

Habitualmente nuestras tablas tienen identificadores únicos de las unidades de análisis o una serie de identificadores que resultan en una clave combinada.


La función get_dupes() del paquete janitor es una herramienta útil para identificar estas repeticiones.

Eliminación de duplicados por observaciones únicas


Para eliminar filas duplicadas en una tabla de datos podemos utilizar la función distinct() de dplyr.


distinct() muestra observaciones únicas a partir de la coincidencia total o parcial.


La función tiene un argumento denominado .keep_all que permite valores TRUE o FALSE. Si se iguala a TRUE se mantienen en el resultado todas las variables que son parte de la tabla, aunque estas no estén declaradas dentro del distinct().

Por defecto, este argumento se encuentra igualado a FALSE.

Eliminación de duplicados por recorte de observaciones


Recortar es similar a filtrar, la diferencia está en que se filtra por condiciones y recortamos por posiciones.

La familia de funciones que se puede utilizar para recortar es slice_*().

Estas funciones pueden ser muy útiles si se aplican a un dataframe agrupado porque la operación de recorte se realiza en cada grupo por separado.


Por ejemplo, si en una tabla hay varias filas por persona con fechas distintas de un seguimiento y queremos quedarnos con la última visita, podemos utilizar combinado group_by() y slice_max() para quedarnos sólo con esa observación del último encuentro para cada uno.

Marcar duplicados


Si lo que buscamos es mantener a todas las observaciones de la tabla pero marcar aquellos que consideramos duplicados podemos hacer:

  1. Recortar el dataframe original a sólo las filas para el análisis. Guardar los ID de este dataframe reducido en un vector.

  2. En el dataframe original, creamos una variable de marca usando case_when(), basándonos si el ID está presente en el dataframe reducido (vector de ID anterior).